/**
 * 通用权限控制脚本
 * 为所有页面提供统一的权限检查功能
 */

// 页面权限配置
const PAGE_PERMISSIONS = {
    'dashboard.html': ['system_admin', 'book_admin', 'normal_user'], // 所有用户都可以访问仪表板
    'my-borrows.html': ['normal_user', 'book_admin', 'system_admin'], // 所有用户都可以查看自己的借阅
    'my-payments.html': ['normal_user', 'book_admin', 'system_admin'], // 所有用户都可以查看自己的费用
    'users.html': ['system_admin'], // 只有系统管理员可以管理用户
    'books.html': ['system_admin', 'book_admin'], // 系统管理员和图书管理员可以管理图书
    'categories.html': ['system_admin', 'book_admin'], // 系统管理员和图书管理员可以管理分类
    'borrows.html': ['system_admin', 'book_admin'], // 系统管理员和图书管理员可以管理借阅
    'payments.html': ['system_admin', 'book_admin'], // 系统管理员和图书管理员可以管理财务
    'notifications.html': ['system_admin', 'book_admin'], // 系统管理员和图书管理员可以管理通知
    'backup.html': ['system_admin'], // 只有系统管理员可以管理数据备份
    'system.html': ['system_admin'], // 只有系统管理员可以管理系统配置
    'statistics.html': ['system_admin', 'book_admin'] // 系统管理员和图书管理员可以查看统计
};

/**
 * 通用权限检查函数
 * @param {string} pageName - 页面名称（如 'users.html'）
 * @returns {boolean} - 是否有权限访问
 */
function checkPagePermission(pageName) {
    // 检查登录状态
    if (!authManager.requireAuth()) {
        return false;
    }
    
    const currentUser = authManager.getCurrentUser();
    if (!currentUser) {
        return false;
    }
    
    // 获取页面所需权限
    const requiredRoles = PAGE_PERMISSIONS[pageName];
    if (!requiredRoles) {
        // 如果没有配置权限，默认允许所有登录用户访问
        return true;
    }
    
    // 检查用户角色是否在允许的角色列表中
    const userRole = currentUser.role;
    if (!requiredRoles.includes(userRole)) {
        // 显示权限不足提示
        if (typeof Utils !== 'undefined' && Utils.showMessage) {
            Utils.showMessage('您没有权限访问此页面', 'error');
        } else {
            alert('您没有权限访问此页面');
        }
        
        // 延迟跳转到仪表板
        setTimeout(() => {
            window.location.href = 'dashboard.html';
        }, 2000);
        
        return false;
    }
    
    return true;
}

/**
 * 初始化页面权限控制
 * 应该在每个页面的 DOMContentLoaded 事件中调用
 */
function initializePagePermission() {
    // 获取当前页面名称
    const currentPage = window.location.pathname.split('/').pop() || 'dashboard.html';
    
    // 检查权限
    if (!checkPagePermission(currentPage)) {
        return false;
    }
    
    // 应用权限控制到页面元素
    if (authManager && authManager.applyPermissionControl) {
        authManager.applyPermissionControl();
    }
    
    // 生成侧边栏菜单（如果存在）
    const sidebarMenu = document.getElementById('sidebarMenu');
    if (sidebarMenu && authManager && authManager.generateSidebarMenu) {
        sidebarMenu.innerHTML = authManager.generateSidebarMenu();
    }
    
    return true;
}

/**
 * 获取页面显示名称
 */
function getPageDisplayName(pageName) {
    const pageNames = {
        'dashboard.html': '仪表板',
        'my-borrows.html': '我的借阅',
        'my-payments.html': '我的费用',
        'users.html': '用户管理',
        'books.html': '图书管理',
        'categories.html': '分类管理',
        'borrows.html': '借阅管理',
        'payments.html': '财务管理',
        'notifications.html': '通知管理',
        'backup.html': '数据管理',
        'system.html': '系统配置',
        'statistics.html': '统计报表'
    };
    return pageNames[pageName] || pageName;
}

// 创建PermissionControl对象
const PermissionControl = {
    checkPageAccess: function() {
        return checkPagePermission(window.location.pathname.split('/').pop() || 'dashboard.html');
    }
};

// 导出到全局作用域
window.checkPagePermission = checkPagePermission;
window.initializePagePermission = initializePagePermission;
window.getPageDisplayName = getPageDisplayName;
window.PAGE_PERMISSIONS = PAGE_PERMISSIONS;
window.PermissionControl = PermissionControl;